package db;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.ResultSetHandler;

public class DBfangfa {
	// ResultSetHandler接口
	/*
	 * ArrayHandler：将ResultSet中第一行的数据转化成对象数组
	 * ArrayListHandler将ResultSet中所有的数据转化成List，List中存放的是Object[]
	 * BeanHandler：将ResultSet中第一行的数据转化成类对象
	 * BeanListHandler：将ResultSet中所有的数据转化成List，List中存放的是类对象
	 * MapHandler：将ResultSet中第一行的数据存成Map映射
	 * MapListHandler：将ResultSet中所有的数据存成List。List中存放的是Map
	 * ScalarHandler：将ResultSet中一条记录的其中某一列的数据存成Object等转化类。
	 */
	/**
	 * dbutils——beanlist查询
	 * 
	 * @param strSQL
	 *            查询语句
	 * @param rsh
	 *            查询结果结构handler
	 * @return 查询结果
	 */
	public <T> T query(String strSQL, ResultSetHandler<T> rsh) {
		// 返回值对象（泛型）
		T l = null;
		try {
			// 在dbutils工具中使用queryrunner进行查询
			QueryRunner q = new QueryRunner(DBDataSource.getdatasource());
			// 获取查询结果list
			l = q.query(strSQL, rsh);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return l;

	}

	/**
	 * @param strSQL
	 *            查询语句
	 * @param rsh
	 *            结果handler
	 * @param param
	 *            查询参数
	 * @return 结果集
	 */
	public <T> T query(String strSQL, ResultSetHandler<T> rsh, Object... param) {
		T l = null;
		try {
			QueryRunner q = new QueryRunner(DBDataSource.getdatasource());
			l = q.query(strSQL, rsh, param);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return l;
	}

	/**
	 * 新增和修改操作
	 * 
	 * @param strSQL
	 *            更新语句
	 * @param params
	 *            参数集合
	 * @return 所影响的记录条数
	 */
	public int update(String strSQL, Object... params) {
		int l = 0;
		try {
			QueryRunner q = new QueryRunner(DBDataSource.getdatasource());
			l = q.update(strSQL, params);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return l;
	}

	/**
	 * 新增和修改批处理操作
	 * 
	 * @param strSQL
	 *            更新语句
	 * @param params
	 *            参数集合
	 * @return 批处理有影响的记录条数
	 */
	public int[] batch(String strSQL, Object[][] params) {
		int[] l = null;
		try {
			QueryRunner q = new QueryRunner(DBDataSource.getdatasource());
			l = q.batch(strSQL, params);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return l;
	}
}
